首页 > 试题广场 >

炮台攻击

[编程题]炮台攻击
  • 热度指数:22911 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
兰博教训提莫之后,然后和提莫讨论起约德尔人,谈起约德尔人,自然少不了一个人,那 就是黑默丁格------约德尔人历史上最伟大的科学家. 提莫说,黑默丁格最近在思考一个问题:黑默丁格有三个炮台,炮台能攻击到距离它小于等于R的敌人 (两点之间的距离为两点之间直线距离,例如(3,0),(0,4)之间的距离是5),如果一个炮台能攻击 到敌人,那么就会对敌人造成1×的伤害.黑默丁格将三个炮台放在N*M方格中的点上,并且给出敌人 的坐标. 问:那么敌人受到伤害会是多大?

输入描述:
每一行输入9个整数R x1 y1 x2 y2 x3 y3 x0 y0
其中R代表炮台攻击的最大距离,(x1,y1),(x2,y2),(x3,y3)代表三个炮台的坐标,(x0,y0)代表敌人的坐标。


输出描述:
输出一行,这一行代表敌人承受的最大伤害,(如果每个炮台都不能攻击到敌人,输出0×)
示例1

输入

1 1 1 2 2 3 3 1 2

输出

2x
推荐
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
inline int sqr(int x){return x * x;}
int main(){
	int R,x[6],y[6];
	while(scanf("%d",&R) != EOF){
		for(int i = 0;i < 4;++ i) scanf("%d%d",&x[i],&y[i]);
		int ret = 0;
		for(int i = 0;i < 3;++ i)
		if(sqr(x[i] - x[3]) + sqr(y[i] - y[3]) <= sqr(R))
			++ ret;
		printf("%dx\n",ret);
	}
	return 0;
}
编辑于 2016-03-01 14:24:14 回复(11)
def damage(R,x1,y1,x2,y2,x3,y3,x0,y0):
    count = 0
    if (x0-x1)**2 + (y0-y1)**2<=R**2:
        count = count + 1 
    if (x0-x2)**2 + (y0-y2)**2<=R**2:
        count = count + 1 
    if (x0-x3)**2 + (y0-y3)**2<=R**2:
        count = count + 1 
    print(str(count)+"x")

    
while True:
    try:
        R,x1,y1,x2,y2,x3,y3,x0,y0 = map(int,input().strip().split())
        damage(R,x1,y1,x2,y2,x3,y3,x0,y0)
    except:
        break

发表于 2021-09-25 12:22:07 回复(0)